package lost_and_found.model;

import java.sql.SQLException;
import java.util.ArrayList;

import to.LostAndFoundListTO;
import to.LostAndFoundTO;
import to.PagingTO;
import board.util.Utilities;

public class LostAndFoundService {
	private LostAndFoundDAO dao;

	public LostAndFoundService(LostAndFoundDAO dao) {
		this.dao = dao;
	}
	//글입력 처리를 하는 Business 메소드
		public void writeContent(LostAndFoundTO lfto) throws SQLException{
			
			String writeDate = Utilities.getNow();
			String c = Utilities.changeContentForDB( lfto.getContent());
			 lfto.setWritedate(writeDate);
			 lfto.setContent(c);
			//2
			dao.insertContentForNewCount( lfto);
			//3  - 멱등처리(redirect전송)의 경우 아래 코드는 필요없음
			 lfto.setWritedate(Utilities.changeDayTimeFormat(writeDate));
		}
		public ArrayList<LostAndFoundTO> getBoardAllList() throws SQLException{
			//1. dao로부터 전체 글내용을 ArrayList로 조회
			ArrayList<LostAndFoundTO> list = dao.selectLostAllList();
			//2 list내의 BoardDTO객체들의 writedate를 변경
			for(LostAndFoundTO lfto:list){
				lfto.setWritedate(Utilities.changeDayFormat(lfto.getWritedate()));
			}
			return list;
		}
		public LostAndFoundTO getContentByNO(int no) throws SQLException{
			//1. 조회수 증가
			dao.updateViewCount(no);
			//2. no로 글 정보 조회
			LostAndFoundTO lfto = dao.selectContentByNO(no);
			//2-1 writedate를 yyyy.MM.dd HH:mm:ss 형식으로 변경
			lfto.setWritedate(Utilities.changeDayTimeFormat(lfto.getWritedate()));
			return lfto;
		}
		public LostAndFoundTO getContentByNoForForm(int no) throws SQLException{
			//1. no값으로 글 조회
			LostAndFoundTO lfto = dao.selectContentByNO(no);
			//2. content를 textarea용으로 변경
			lfto.setContent(Utilities.changeContentForTextArea(lfto.getContent()));
			return lfto;
		}
		public void modifyContent(LostAndFoundTO lfto) throws SQLException{
			//1. property변경 - content, writedate
			lfto.setContent(Utilities.changeContentForDB(lfto.getContent()));
			lfto.setWritedate(Utilities.getNow());
			//2. 수정 처리
			dao.updateContent(lfto);
			//3. writedate 포멧 변경 - 멱등처리(redirect전송)의 경우 아래 코드는 필요없음
			lfto.setWritedate(Utilities.changeDayTimeFormat(lfto.getWritedate()));
		}
		public void deleteContentByNO(int no) throws SQLException{
			dao.deleteContentByNO(no);
		}
		public void replyContent(LostAndFoundTO lfto) throws SQLException{
			//1. DB에 같은 refamily의 restep들을 1씩 증가시킨다.
			dao.updateRestep(lfto.getRefamily(), lfto.getRestep());
			//2. bto의 restep, relevel을 1 증가시킨다.
			lfto.setRestep(lfto.getRestep()+1);
			lfto.setRelevel(lfto.getRelevel()+1);
			//3. insert할 글 번호를 가져온와 bto에 넣는다. 
			//4. BoardDTO에 no, writeDate와 content는 DB 저장용으로 변경한다.
			
			
			lfto.setWritedate(Utilities.getNow());
			lfto.setContent(Utilities.changeContentForDB(lfto.getContent()));
			//5. 새글 등록 - dao.insertContent() 이용
			dao.insertContentForReply(lfto);
			
			//6. 날짜 형태 show_content.jsp에서 보여주도록 년.월.일 시:분:초 로 변경 - 멱등처리(redirect전송)의 경우 아래 코드는 필요없음
			lfto.setWritedate(Utilities.changeDayTimeFormat(lfto.getWritedate()));
		}
		//페이징 리스트 조회
		public  LostAndFoundListTO getLostListByPage(int page) throws SQLException{
			//1. dao로부터 전체 글내용을 ArrayList로 조회
			ArrayList<LostAndFoundTO> list = dao.selectLostListByPage(page);
			//2 list내의 BoardDTO객체들의 writedate를 변경
			for(LostAndFoundTO lfto:list){
				lfto.setWritedate(Utilities.changeDayFormat(lfto.getWritedate()));
			}
			//3. PagingDTO객체를 생성
			// 	3.1. - dao.selectTotalContent() - 총게시물 수를 리턴
			int totalContent = dao.selectTotalContent();
			PagingTO pagingTO = new PagingTO(totalContent, page);
			//4. ArrayList, PagingDTO객체를 이용해 ListDTO를 생성해서 return
			 LostAndFoundListTO lto = new  LostAndFoundListTO(list, pagingTO);
			return lto;
		}
		
	
}
